package com.lock8;

import java.sql.Time;
import java.util.concurrent.TimeUnit;

/**
 *  关于锁的八个问题
 *  必须要结合 sleep 延时
 *
 *  1.示例中，标准情况下(不加延时)，2个线程先打印 A 还是 B ->A
 *  2.A方法延时4s 2个线程先打印 A 还是 B ->A
 *  锁的对象是方法的调用者 此时锁对象是 data 2个方法同一把锁，谁先拿到谁执行
 * */

public class Test1 {
    public static void main(String[] args) {
        Data data = new Data();

        new Thread(data::sendA).start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(data::sendB).start();
    }
}
class Data{

    //synchronized 锁的对象是方法的调用者
    public synchronized void sendA(){
        try {
            TimeUnit.SECONDS.sleep(3);//延时3s
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("AA");
    }
    public synchronized void sendB(){
        System.out.println("BB");
    }
}